%%% основные операции над графом
-module(graph).
-export([get_array/1, adj/2, v/1, new/0, new/2]).
-export([add_edge_in_orgraph/2]).
-include("graph.hrl").

%%% создает пустой граф
new()->
    #graph{nodes=[],listAdj=array:new({default,[]})}.

%% создает граф с множеством вершин и списком смежности
new(V,E)->
    #graph{nodes=V, listAdj=E}.

%%% получение славаря графа
get_array(Graph)->
    Graph#graph.listAdj.

%%% множество связанных вершин с вершиной V
adj(V, G)->
    array:get(V, get_array(G) ).

%%% множество вершин графа
v(G)->
    G#graph.nodes.

%%% добавление ребра в граф
add_edge_in_orgraph({V1, V2}, Graph)->
    new(v(Graph),
	array:set(V1,
		  lists:append(array:get(V1, get_array(Graph)), [V2]),
		  get_array(Graph))).
